<?php
/*
* Třída pro práci s ISBN
* V konstruktoru se získají všechny proměné
* Poté se k nim přistupuje pomocí veřejných metod
*/
class isbn
{
	private $isbn;
	private $ciste_isbn;
	private $isbn10;
	private $isbn13;
	
	public function __construct($isbn)
	{
		$this->isbn = $isbn;
		$this->ocisteniIsbn();
		if(!$this->zkontrolujIsbn())
			echo "<script> window.alert('Toto není platné ISBN')</script>";
		switch(strlen($this->ciste_isbn))
		{
			case 10:
				$this->isbn10 = $isbn;
				$this->prevedNa13();
				break;
			case 13:
				$this->isbn13 = $isbn;
				$this->prevedNa10();
				break;
		}		
	}
	/*-----------------------
	* return - true - je v db || false - není v db
	* Autor: Daniel Meisner
	-----------------------*/
	public function isbnJeVDb()
	{
	$isbn = mysqli_real_escape_string($GLOBALS["pripojeni"],$this->isbn);
	$query= mysqli_query($GLOBALS["pripojeni"],"SELECT `isbn` FROM `knihy` WHERE `isbn`= '".$isbn."' LIMIT 1 ");
	$je_v_db = (mysqli_num_rows($query) == 1);
	return($je_v_db);
	}
	/*-----------------------
	* Odstraňuje pomlčky, mezery, atd. získáváme čisté číslo
	-----------------------*/
	private function ocisteniIsbn()
	{
		$this->ciste_isbn = str_replace(array(' ', '-', '.'), '', $this->isbn);	
	}
	/*-----------------------
	* Metody na získávání promenných
	-----------------------*/
	public function vratCisteIsbn()
	{
		return($this->ciste_isbn);
	}
	public function vratIsbn10()
	{
		return($this->isbn10);	
	}
	public function vratIsbn13()
	{
		return($this->isbn13);	
	}
	public function vratIsbn()
	{
		return($this->isbn);	
	}
	/*-----------------------
	* Kontroluje jestli je ISBN-10 validní
	-----------------------*/
	private function zkontrolujIsbn10()
	{
		$isbn = $this->ciste_isbn;
		$posledni_cislo = substr($isbn, -1);
		if(!is_numeric($posledni_cislo)) //Posledni cislo muze byt X 
		{
			$posledni_cislo = strtoupper($posledni_cislo);
			if($posledni_cislo == "X")
				$posledni_cislo = 10;	
			else //Jestli je neco jineho na konci nez X nebo cislo tak to neni ISBN-10
				return(false);
		}
		for($i = 0; $i < 9; $i++)
		{
			$soucet += $isbn[$i]*(10 - $i);	
		}
		$soucet += $posledni_cislo;
		if($soucet%11 == 0)
			return(true);	
		else
			return(false);
	}
	/*-----------------------
	* Kontroluje jestli je ISBN-13 validní
	-----------------------*/
	private function zkontrolujIsbn13()
	{
		$isbn = $this->ciste_isbn;
		$soucet = $isbn[0] + ($isbn[1] * 3) + $isbn[2] + ($isbn[3] * 3) + $isbn[4] + ($isbn[5] * 3) + $isbn[6] + ($isbn[7] * 3) + $isbn[8] + ($isbn[9] * 3) + $isbn[10] + ($isbn[11] * 3) + $isbn[12] + ($isbn[13] * 3);
		$modulo = $soucet % 10;
		if($modulo == 0)
			return(true);
		else
			return(false);	
	}
	/*-----------------------
	* Kontroluje jestli je to ISBN v jakémkoliv formátu
	-----------------------*/
	private function zkontrolujIsbn()
	{
		$delka = strlen($this->ciste_isbn);
		if(($delka == 10) and (is_numeric(substr($this->ciste_isbn, -10, 9))))
			return($this->zkontrolujIsbn10());	
		elseif(($delka == 13) and (is_numeric($this->ciste_isbn)))
			return($this->zkontrolujIsbn13());
		else
			return false;
	}
	/*-----------------------
	* Převádí na ISBN-13, zachovává pomlčky
	-----------------------*/
	private function prevedNa13()
	{
		//Vypočítáme kontrolní číslici
		$i = "978" . substr($this->ciste_isbn, 0, -1);
        $soucet = $i[0] + ($i[1] * 3) + $i[2] + ($i[3] * 3) + $i[4] + ($i[5] * 3) + $i[6] + ($i[7] * 3) + $i[8] + ($i[9] * 3) + $i[10] + ($i[11] * 3) + $i[12] + ($i[13] * 3);
		$posledni_cislo = $soucet % 10;
		if($posledni_cislo != 0)
			$posledni_cislo = 10 - $posledni_cislo;
		$this->isbn13 = "978-".substr($this->isbn,0,-1).$posledni_cislo; //Zůstaly zachované -	
	}
	/*-----------------------
	* Převádí na ISBN-10, zachovává pomlčky
	-----------------------*/
	private function prevedNa10()
	{
		$i = substr($this->ciste_isbn, 3);
		for($a = 0; $a < 9; $a++)
		{
			$soucet += $i[$a]*(10 - $a);	
		}
		$posledni_cislo = $soucet % 11;
		if($posledni_cislo != 0)
			$posledni_cislo = 11 - $posledni_cislo;
		if($posledni_cislo == 10)
			$posledni_cislo = "X";
		$this->isbn10 = substr($this->isbn,4,12).$posledni_cislo;
	}		
}